- 博客(108)
- 资源 (8)
- 收藏
- 关注
原创 求编辑距离
定义编辑距离又称Leveinshtein距离,是由俄罗斯科学家Vladimir Levenshtein在1965年提出。编辑距离是计算两个文本相似度的算法之一,以字符串为例,字符串a和字符串b的编辑距离是将a转换成b的最小操作次数,这里的操作包括三种:插入一个字符删除一个字符替换一个字符举个例子,kitten和sitting的编辑距离是3,kitten -> sitten(k替
2017-12-26 15:50:08 7442 4
原创 求素数个数
我最近在leetcode上撸了一个小算法,虽然已经工作了五年,当看到每次代码提交后排名的提升,内心依然很有成就感。题目比较简单,求小于n的素数个数,素数也叫质数,具有以下特点:正整数只能被1和本身整除1既不是素数也不是合数,所以最小的素数是2根据上面的特点,我们还可以推断出:除了2,其它的素数都是奇数依据这一点,我们可以写出下面的实现:class Solution { publi
2017-12-10 22:20:17 12773 3
原创 服务化架构下的数据一致性如何保证
在系统服务化的过程中,我们不得不面临的一个问题是多个子系统间业务数据的一致性如何保证,解决这个问题有多种方式。XA可能很多人首先会想到XA规范中定义的分布式事务,下图是XA规范中定义的DTP(Distributed Transaction Processing)模型: 但该模式并不适用于如今的互联网应用,主要有以下几点问题: 1. XA采用2PC,并不能完全保证一致性; 2. 2PC有同步
2017-10-27 10:40:24 3797 2
原创 探究InnoDB可重复读
在RC(Read Committed)和RR(Repeatable Read)两种事务隔离级别下,InnoDB存在两种数据读取方式:快照读(Snapshot Read)故名思意,快照读读取的都是快照数据,快照怎么来,在InnoDB引擎下是基于undo log,那undo log又是什么?举例说明,假设有这样一个表:-- 表结构CREATE TABLE `innodb_test
2017-10-17 11:15:35 3397 2
转载 CAP理论十二年回顾:"规则"变了
CAP理论断言任何基于网络的数据共享系统,最多只能满足数据一致性、可用性、分区容忍性三要素中的两个要素。但是通过显式处理分区情形,系统设计师可以做到优化数据一致性和可用性,进而取得三者之间的平衡。自打引入CAP理论的十几年里,设计师和研究者已经以它为理论基础探索了各式各样新颖的分布式系统,甚至到了滥用的程度。NoSQL运动也将CAP理论当作对抗传统关系型数据库的依据。CAP理论主张任何基于网络的数据
2017-10-09 20:02:04 2566
原创 去哪儿网任务系统演进
这是我分享在公司公众号的一篇文章,比较偏业务: http://mp.weixin.qq.com/s/ttNjEgIQ01MgOol7piTjcg
2017-09-01 17:47:01 2844 2
原创 增量接口的设计及实现
引言在应用开发过程中,我们总会碰到这样的场景:某系统需要同步我们系统的数据去做一些业务逻辑,当数据量较小的时候,可以全量的提供,但当数据量很大时,全量提供就显得很笨重,不仅耗时而且做了很多无用功,这时我们需要一种提供增量数据的机制,只告诉对方变化的数据。提供增量数据大致可分为两种方式:MQ和接口提供,MQ的优点是及时,缺点是丢失、重复、回溯复杂等等问题(依赖于具体MQ实现),这里不过多赘述;接
2017-03-20 15:26:57 10670 1
原创 再聊线程池
最近恰好在组内分享线程池,又看了看四年前自己写的线程池文章,一是感叹时光荏苒,二是感叹当时的理解太浅薄了,三是感叹自己这么多年依然停留在浅薄的理解当中,没有探究其实现,羞愧难当。遂把分享的内容整理出来,希望能够让读者对线程池有一个全新的认识。
2016-12-09 23:29:15 9053 14
原创 Hession反序列化导致CPU占用飙高
今天发布一个线上服务,暂且称之为O,发布完后,依赖O服务的2个服务C和W大量Time报警,并且这两个服务的CPU占用都飙到了40%左右,平时只有10%的样子。 这时去看O服务的监控,Time并没有升高,QPS反倒降了一半。同时C和W服务器日志中出现了大量的WARNING,信息如下:java.lang.ClassNotFoundException: com.我是不可描述的信息.Propert
2016-12-03 00:08:26 7168 4
原创 装修后记
硬装墙漆品牌:多乐士价钱:1000数量:1桶18L面漆+2桶5L底漆地址:京昌回龙观建材城3区4号备注:官网找的门店,服务很差。进门点就推荐我买底漆,说底漆遮盖强,我进了两家店都这样讲。但从实际体验来看,不推荐买底漆,即使是无添加底漆也有味道,并且遮盖也不行,远远不如面漆厨房地砖品牌:蒙娜丽莎价钱:490数量:14片600mm地址:京昌回龙观建材城备注:橱柜底下没换,厨房地砖要
2016-11-26 11:07:14 4253 2
原创 Java奇淫巧技之Lombok
背景 我们在开发过程中,通常都会定义大量的JavaBean,然后通过IDE去生成其属性的构造器、getter、setter、equals、hashcode、toString方法,当要对某个属性进行改变时,比如命名、类型等,都需要重新去生成上面提到的这些方法,那Java中有没有一种方式能够避免这种重复的劳动呢?答案是有,我们来看一下下面这张图,右面是一个简单的JavaBean,只定义了两个属性
2016-09-08 14:35:28 85843 10
原创 如何替换博客的搜索模块
CSDN的博客其实并不好用,问题很多,这里就不一一列举。前段时间突然发现,量子横道统计不知道从什么时候下线了,我当时正要跟同事去show一下我博客的pv,结果没show出来,我就反馈了什么时候把统计服务更换一下啊,当时是在一个升级公告底下反馈的,结果当然是没人鸟啦。这件事也没在意,官方不解决就拉倒吧,我可以自己去加统计,但后来某一天,我的博客加载异常缓慢,发现是量子横道的一个js加载一直是pendi
2016-08-14 20:56:38 3058 3
原创 MySQL字符集不一致导致索引失效
两个表join查询,却不走连接条件的索引。当索引无问题,sql也无问题时,就可以去看看这两个表的字符集是否一致,这是我耗费一个下午得出来的经验教训。
2016-08-02 20:26:41 5688
原创 如何实现基于商圈和地标的位置搜索
标题中包含了两个关键词,商圈和地标,先来解释一下商圈和地标这两个名词。商圈是一个地理范围,但并不是官方的划分,而是民间大致的划分,它通常提供了民众消费、娱乐的功能,产生了一个相对集中的活动区域,比如王府井、五棵松。地标是地图上的一个点,它通常在某个范围有一定知名度,大家都知道它,它可以是一个大厦、景点、酒店、饭店,比如人民大会堂、北京工人体育场、大裤衩大楼等等。那实现这两个的搜索有什么好处呢?
2016-07-19 18:11:46 12380
原创 Guava Predicate
Predicate<泛型>(断言,断定),是Guava中的一个基础接口,其内部只有一个方法`boolean apply(T input)`,这个方法输入是一个泛型对象,输出是一个布尔值,非常简单,下面来看一下这个小东西能帮助我们做
2016-06-18 23:45:24 6940
原创 Java线程(七):Callable和Future
接着上一篇继续并发包的学习,本篇说明的是Callable和Future,它俩很有意思的,一个产生结果,一个拿到结果。 Callable接口类似于Runnable,从名字就可以看出来了,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功能更强大一些,被线程执行后,可以返回值,这个返回值可以被Future拿到,也就是说,Future可以拿到异步执行任务的返
2016-02-05 15:12:04 285009 64
原创 如何实现按距离排序、范围查找
简介现在几乎所有的O2O应用中都会存在“按范围搜素、离我最近、显示距离”等等基于位置的交互,那这样的功能是怎么实现的呢?本文提供的实现方式,适用于所有数据库。实现为了方便下面说明,先给出一个初始表结构,我使用的是MySQL:CREATE TABLE `customer` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键
2016-01-30 11:58:03 53046 8
原创 Java线程(十一):Fork/Join-Java并行计算框架
并行计算在处处都有大数据的今天已经不是一个新鲜的词汇了,现在已经有单机多核甚至多机集群并行计算,注意,这里说的是并行,而不是并发。严格的将,并行是指系统内有多个任务同时执行,而并发是指系统内有多个任务同时存在,不同的任务按时间分片的方式切换执行,由于切换的时间很短,给人的感觉好像是在同时执行。 Java在JDK7之后加入了并行计算的框架Fork/Join,可以解决我们系统中大数据计算的性能问题。
2015-07-22 21:12:51 19312 16
原创 MySQL从5.5升级到5.6,TIMESTAMP的变化
前言前段时间,系统MySQL从5.5升级到了5.6,系统出现了大量的异常。大部分异常引起原因是由于TIMESTAMP的行为发生了变化。TIMESTAMP在MySQL5.5中的行为第一个未设置默认值的TIMESTAMP NOT NULL字段隐式默认值: CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP后面未设置默认值的TIMESTAMP NOT NULL
2015-05-10 23:47:32 15941 2
翻译 Nested-Loop Join Algorithms
MySQL使用嵌套循环算法来实现多表之间的联接。Nested-Loop Join Algorithms一个简单的嵌套循环联接(NLJ)算法,循环从第一个表中依次读取行,取到每行再到联接的下一个表中循环匹配。这个过程会重复多次直到剩余的表都被联接了。 假设表t1、t2、t3用下面的联接类型进行联接:Table Join Typet1 ranget2 reft3
2015-03-06 14:16:43 8625 2
原创 Collections.sort in JDK6:MergeSort
本文是对JDK6中Collections.sort方法的源码解析,也可以看作是对Comparison method violates its general contract!的后续分析。在JDK6中,该方法底层使用的是经过优化后的归并排序,废话不多说,直接看源码。public static void sort(List list, Comparator c) { Object[] a = l
2015-01-02 14:01:41 4762 1
原创 Comparison method violates its general contract!
背景16号为了统一线上服务器运行环境,将两台服务器的Tomcat6+JDK6升级到Tomcat7+JDK7,本以为很简单的事情,升级后自己验证也没问题,没想到却悲剧了。升级后,过了半小时运营就找过来反馈问题,部分角色无法登陆系统,由于异常日志没有输出,没有找到问题,无奈回滚。今天我们就来说说JDK6升级到JDK7会遇到的坑。本文为了方便搜索,就直接以异常信息作为文章标题了。复现回滚后,...
2014-12-18 23:08:42 76407 13
原创 Java线程(十):CAS
前言 在Java并发包中有这样一个包,java.util.concurrent.atomic,该包是对Java部分数据类型的原子封装,在原有数据类型的基础上,提供了原子性的操作方法,保证了线程安全。下面以AtomicInteger为例,来看一下是如何实现的。public final int incrementAndGet() { for (;;) { ...
2014-08-18 21:54:37 12388 8
原创 Guava Collect
进入新公司就会接触一些新的东东,Guava就是一个,Guava是Google的一个开源类库,丰富了JDK的API,而且使用起来很方便,本文介绍的是Guava collect包下的一些常用工具类。
2014-06-01 17:57:03 8460
翻译 INSERT ... ON DUPLICATE KEY UPDATE
本文来自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/23557915,转载请注明。 向数据库插入记录时,有时会有这种需求,当符合某种条件的数据存在时,去修改它,不存在时,则新增,也就是insertOrUpdate操作。这种控制可以放在业务层,也可以放在数据库层,大多数数据库都支持这种需求,如Oracle的merge
2014-04-13 22:05:37 70626 15
原创 Notepad++列编辑、正则查找、替换
本文来自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/22507859,转载请注明。目标: 将源数据转成初始化sql语句。源数据:104110040018,1,中国银行,中国银行天津琼州道支行,NULL,1100,天津市,12,天津市104110040059,1,中国银行,中国银行天津利民道支行,N
2014-03-29 19:07:06 28118
原创 Why hashcode 31?
前几天被人问到了hashcode如何实现,说实话,真的是没有自己写过,通常情况下都会通过IDE自动生成,惭愧。今天研究了下hashcode的生成原理,首先看一下String类中的hashCode方法
2014-03-16 17:22:44 5335 6
原创 完全跨域的单点登录
本文来自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/20545513,转载请注明。 完全跨域的单点登录实现方案基本和上篇文章介绍的一样,只不过生成ticket的过程更复杂些。上篇文章中的项目是不能完全跨域的,由于多个应用系统以及认证系统域不同,也没有共同的父域,导致登录后,认证系统向浏览器写的tic...
2014-03-05 16:11:50 88474 138
原创 共同父域下的单点登录
单点登录(Single Sign On),简称为SSO,SSO不仅在企业级开发很常用,在互联网中更是大行其道。随便举几个例子,比如我们登录新浪微博后,再访问新浪首页后,我们发现,已经自动登录了;再比如我们登录CSDN后,可以写博客、逛论坛、下载资源等等。前者是完全跨域的单点登录,下文会讲,后者是共同父域下(www.csdn.net、blog.csd.net、bbs.csdn.net、passport.csdn.net)的单点登录,也就是本文的主要内容。
2014-03-04 22:38:28 32005 24
原创 Cookie深度解析
本文来自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/20466351,转载请注明。 最近在公司做了Web端单点登录(SSO)功能,基于Cookie实现,做完之后感觉有必要总结一下,本文着重讲解Cookie,下文会说明单点登录的实现方案。Cookie简介 众所周知,Web协议(也就...
2014-03-04 12:37:29 53620 21
原创 Java序列化(一)
Java序列化,一个日常开发中比较少用到的技术。正常情况下,JVM启动后,我们可以创建对象生存其内,JVM关闭后,我们创建过的对象都随之销毁,资源释放。但有些时候可能要求在JVM停止之后,某些对象需要保存起来,以便将来再重新读取它们。
2014-01-28 20:58:24 6980 5
原创 Java Mail(三):Session、Message详解
上篇文章介绍了JavaMail并实现了一个发送邮件的简单示例,JavaMail API使用上非常灵活,比如,服务器信息可以设置到Session中,也可以设置到Transport中,收件人可以设置到Message中,也可以设置到Transport中,如何使用,取决于我们应用程序中的实际情况。本文详细的介绍一下这三个类的主要方法。Session Session用于收
2014-01-06 12:29:25 35975 16
原创 Java Mail(二):JavaMail介绍及发送一封简单邮件
本文来自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/17839983,转载请注明。 JavaMail是SUN提供给开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发类库,支持常用的邮件协议,如SMTP、POP3、IMAP,开发人员使用JavaMail编写邮件程序时,无需考虑底层的通信细节(Socket)
2014-01-04 15:57:21 100411 22
原创 Unrecognized SSL message, plaintext connection?
以这个错误信息为文章标题是不是更醒目一点,这是JavaMail使用SSL的方式登录邮箱时抛出的异常。代码如:public class JavaMailTest1 { public static void main(String[] args) throws MessagingException { Properties props = new Properties(); props.se
2014-01-03 06:48:53 62970 4
原创 Java线程(四):线程中断、线程让步、线程睡眠、线程合并
最近在Review线程专栏,修改了诸多之前描述不够严谨的地方,凡是带有Review标记的文章都是修改过了。本篇文章是插进来的,因为原来没有写,现在来看传统线程描述的不太完整,所以就补上了。理解了线程同步和线程通信之后,再来看本文的知识点就会简单的多了,本文是做为传统线程知识点的一个补充。有人会问:JDK5之后有了更完善的处理多线程问题的类(并发包),我们还需要去了解传统线程吗?答:需要。
2013-12-26 20:29:27 40876 10
最好用的截图工具,完爆QQ截图
2013-11-13
WebService实例
2013-10-15
kissy瀑布流(含demo)
2012-10-30
flash player独立播放器
2012-03-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人